﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Botonet
{
    public partial class crear : System.Web.UI.Page
    {
        private cDB DBclass = new cDB();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["Tipo"] == null)
            {
                Response.Redirect("index.aspx", false);
            }
            else if (Session["Tipo"].ToString() == "admin")
            {
                if (!IsPostBack)
                {
                    ListarGrupos();
                }
            }
            else
            {
                Response.Redirect("index.aspx", false);
            }
        }

        protected void idGrupos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (idGrupos.SelectedItem.Value != "0")
            {
                System.Data.DataTable grupos = (System.Data.DataTable)Application["Grupos"];

                if ((idGrupos.SelectedItem.Text != "") && (idGrupos.SelectedItem.Value != "0"))
                {
                    idNombreGrupo.Text = idGrupos.SelectedItem.Text;
                    CargarListaUsuarios(idGrupos.SelectedItem.Value);
                }
                else
                {
                    idNombreGrupo.Text = "";
                }
                if (grupos.Rows[(idGrupos.SelectedIndex) - 1]["Descripcion_Grupos"].ToString() != "")
                {
                    idDescripcionGrupo.Text = grupos.Rows[(idGrupos.SelectedIndex) - 1]["Descripcion_Grupos"].ToString();
                }
                else
                {
                    idDescripcionGrupo.Text = "";
                }
            }
            else
            {
                idNombreGrupo.Text = "Sin grupo";
                idDescripcionGrupo.Text = "Usuarios Sin grupo asignado";
                CargarListaUsuarios("NULL");
            }

        }

        protected void idNuevo_Click(object sender, EventArgs e)
        {

            if ((idNombreGrupo.Text != ""))
            {
                cGroup GroupClass = new cGroup();
                if (GroupClass.create(idNombreGrupo.Text, idDescripcionGrupo.Text))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">El grupo se cre&oacute; con &eacute;xito.</div>';</script> ");
                    ListarGrupos();
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">Error al procesar la petici&oacute;n.</div>';</script> ");
                }

            }
            else
            {

            }

        }
        private bool ListarGrupos()
        {
            idGrupos.Items.Clear();
            idGruposAsignar.Items.Clear();
            idLstUsuarios.Items.Clear();
            idJFGrupos.Items.Clear();

            string strQuery = "SELECT * FROM Grupos";
            ListItem itemGrupo;
            if (DBclass.execQuery(strQuery, "Grupos"))
            {
                itemGrupo = new ListItem("(Sin Grupo)", "0");
                idGrupos.Items.Add(itemGrupo);
                idGruposAsignar.Items.Add(itemGrupo);
                Application["Grupos"] = DBclass.DS.Tables["Grupos"].Copy();

                foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["Grupos"].Rows)
                {
                    itemGrupo = new ListItem(FilaGrupo["Nombre_Grupos"].ToString(), FilaGrupo["id_Grupos"].ToString());
                    idGruposAsignar.Items.Add(itemGrupo);
                    idGrupos.Items.Add(itemGrupo);
                    idJFGrupos.Items.Add(itemGrupo);
                }
                CargarListaUsuarios("NULL");
                ListarJefes();

                ListarUsuarios();

                return true;
            }
            return false;
        }

        protected void idEliminar_Click(object sender, EventArgs e)
        {
            if ((idGrupos.SelectedItem.Value != "") && (idGrupos.SelectedItem.Value != "0"))
            {
                cGroup GroupClass = new cGroup();

                if (GroupClass.delete(idGrupos.SelectedItem.Value))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">El grupo se elimin&oacute; con &eacute;xito.</div>';</script> ");
                    ListarGrupos();
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">Error al procesar la petici&oacute;n.</div>';</script> ");

                }
            }
        }

        protected void idModificar_Click(object sender, EventArgs e)
        {
            if ((idNombreGrupo.Text != "") && (idGrupos.SelectedItem.Value != "0"))
            {
                cGroup GroupClass = new cGroup();
                if (GroupClass.update(idNombreGrupo.Text, idDescripcionGrupo.Text, idGrupos.SelectedItem.Value))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">El grupo se modific&oacute; con &eacute;xito.</div>';</script> ");
                    ListarGrupos();
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">Error al procesar la petici&oacute;n.</div>';</script> ");
                }

            }
            else
            {

            }
        }
        private void CargarListaUsuarios(string id_G)
        {
            ListItem itemGrupo;
            int n;
            string strQuery = " ";
            strQuery = "SELECT Email, Nombre, Apellido, DNI, Grupo_Usuario";
            strQuery += " FROM Usuarios LEFT JOIN Usuarios_Grupos ON Usuarios.Email = Usuarios_Grupos.Email_Usuario";
            if (int.TryParse(id_G, out n))
                strQuery += " WHERE Grupo_Usuario = " + id_G;
            else
                strQuery += " WHERE Grupo_Usuario IS NULL";
            strQuery += " AND SuperUser = 0";
            strQuery += " ORDER BY Apellido";

            if (DBclass.execQuery(strQuery, "lstUsuarios"))
            {
                idLstUsuarios.Items.Clear();

                foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["lstUsuarios"].Rows)
                {
                    itemGrupo = new ListItem(FilaGrupo["Nombre"].ToString() + " " + FilaGrupo["Apellido"].ToString(), FilaGrupo["Email"].ToString());
                    idLstUsuarios.Items.Add(itemGrupo);
                }
            }
        }
        protected void ListarJefes(string Grupo = "")
        {
            string strQuery , usuarios="";
            ListItem itemGrupo;
            int n;
            if (Grupo == "")
            {
                strQuery = "SELECT * FROM Usuarios WHERE SuperUser =1 AND Email <> 'admin@botonet.com'";
                if (DBclass.execQuery(strQuery, "Jefes"))
                {
                    idJFJefes.Items.Clear();
                    idPRJefes.Items.Clear();
                    foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["Jefes"].Rows)
                    {
                        itemGrupo = new ListItem(FilaGrupo["Nombre"].ToString() + " " + FilaGrupo["Apellido"].ToString(), FilaGrupo["Email"].ToString());
                        idJFJefes.Items.Add(itemGrupo);
                        idPRJefes.Items.Add(itemGrupo);
                    }
                }
            }
            else if (Grupo != "")
            {
                strQuery = "SELECT Email, Nombre, Apellido, DNI, Grupo_Usuario";
                strQuery += " FROM Usuarios LEFT JOIN Usuarios_Grupos ON Usuarios.Email = Usuarios_Grupos.Email_Usuario";
                strQuery += " WHERE Grupo_Usuario = " + Grupo;
                strQuery += " AND SuperUser = 1 AND Email <> 'admin@botonet.com'";
                strQuery += " ORDER BY Apellido";
                if (DBclass.execQuery(strQuery, "JefesAsignados"))
                {
                    idJFAsignados.Items.Clear();
                    idJFDisponibles.Items.Clear();

                    foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["JefesAsignados"].Rows)
                    {
                        usuarios += ", '" + FilaGrupo["Email"].ToString()+"'";
                        itemGrupo = new ListItem(FilaGrupo["Nombre"].ToString() + " " + FilaGrupo["Apellido"].ToString(), FilaGrupo["Email"].ToString());
                        idJFAsignados.Items.Add(itemGrupo);
                    }
                    strQuery = "SELECT Email, Nombre, Apellido, DNI";
                    strQuery += " FROM Usuarios ";
                    strQuery += " WHERE SuperUser = 1 AND Email NOT IN( 'admin@botonet.com'" + usuarios + ")";
                    strQuery += " ORDER BY Apellido";
                    if (DBclass.execQuery(strQuery, "JefesDisponibles"))
                    {
                        foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["JefesDisponibles"].Rows)
                        {
                            itemGrupo = new ListItem(FilaGrupo["Nombre"].ToString() + " " + FilaGrupo["Apellido"].ToString(), FilaGrupo["Email"].ToString());
                            idJFDisponibles.Items.Add(itemGrupo);
                        }
                    }
                }
            }
        }
        protected void ListarGruposJefe(string email)
        {
            ListItem itemGrupo;
            string strQuery, strGrupos = "";
            int n = 0;
            strQuery = "SELECT * ";
            strQuery += " FROM Grupos LEFT JOIN Usuarios_Grupos ON Grupos.id_Grupos = Usuarios_Grupos.Grupo_Usuario";
            strQuery += " WHERE Usuarios_Grupos.Email_Usuario = '" + email + "'";
            if (DBclass.execQuery(strQuery, "GruposAsignados"))
            {
                idJFAsignados.Items.Clear();

                foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["GruposAsignados"].Rows)
                {
                    strGrupos += ", ";
                    strGrupos += FilaGrupo["id_Grupos"].ToString();
                    itemGrupo = new ListItem(FilaGrupo["Nombre_Grupos"].ToString(), FilaGrupo["id_Grupos"].ToString());
                    idJFAsignados.Items.Add(itemGrupo);
                }
            }
            strQuery = "SELECT *";
            strQuery += " FROM Grupos ";
            strQuery += " WHERE id_Grupos NOT IN (-1" + strGrupos + ")";

            if (DBclass.execQuery(strQuery, "GruposDisponibles"))
            {
                idJFDisponibles.Items.Clear();

                foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["GruposDisponibles"].Rows)
                {
                    itemGrupo = new ListItem(FilaGrupo["Nombre_Grupos"].ToString(), FilaGrupo["id_Grupos"].ToString());
                    idJFDisponibles.Items.Add(itemGrupo);
                }
            }
        }
        protected void idBtnAsignarGrupo_Click(object sender, EventArgs e)
        {
            int nId;
            bool ok = false;
            cUser UserClass = new cUser();
            if ((idLstUsuarios.SelectedIndex >= 0) && (int.TryParse(idGrupos.SelectedItem.Value, out nId)))
            {
                System.Collections.Generic.List<string> selectedItemsList = new System.Collections.Generic.List<string>();

                foreach (ListItem item in idLstUsuarios.Items)
                {
                    if (item.Selected)
                    {
                        if (idGruposAsignar.SelectedItem.Value == "0")
                            ok = UserClass.setGroup(item.Value, "NULL", false);
                        else
                            ok = UserClass.setGroup(item.Value, idGruposAsignar.SelectedItem.Value, false);
                    }
                }

                if (ok)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">El grupo se modific&oacute; con &eacute;xito.</div>';</script> ");
                    ListarGrupos();
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">Error al procesar la petici&oacute;n.</div>';</script> ");

                }

            }
        }

        protected void idJFGrupos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (idJFGrupos.SelectedIndex != -1)
            {
                idJFDescResult.Text = "Jefes del Grupo " + idJFGrupos.SelectedItem.Text;
                idJFOp.Value = "grupo";
                ListarJefes(idJFGrupos.SelectedItem.Value);
            }
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=2</script>");
        }

        protected void idJFJefes_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (idJFJefes.SelectedIndex != -1)
            {
                idJFDescResult.Text = "Grupos del jefe " + idJFJefes.SelectedItem.Text;
                idJFOp.Value = "jefe";
                ListarGruposJefe(idJFJefes.SelectedItem.Value);
            }
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=2</script>");
        }

        protected void idJFQuitar_Click(object sender, EventArgs e)
        {
            bool ok = false;
            string msg = "";
            cUser UserClass = new cUser();
            if (idJFOp.Value == "grupo")
            {
                if (idGruposAsignar.SelectedIndex != -1)
                {
                    foreach (ListItem item in idJFAsignados.Items)
                    {
                        if (item.Selected)
                        {

                            ok = UserClass.DeleteUserGroup(item.Value, idJFGrupos.SelectedItem.Value);

                        }
                    }
                    ListarJefes(idJFGrupos.SelectedItem.Value);
                }
            }
            else if (idJFOp.Value == "jefe")
            {
                if (idGruposAsignar.SelectedIndex != -1)
                {
                    foreach (ListItem item in idJFAsignados.Items)
                    {
                        if (item.Selected)
                        {

                            ok = UserClass.DeleteUserGroup(idJFJefes.SelectedItem.Value, item.Value);

                        }
                    }
                    ListarGruposJefe(idJFJefes.SelectedItem.Value);
                }
            }
            if (ok)
                msg = "Operaci&oacute;n exitosa";
            else
                msg = "Error al ejecutar la operaci&oacute;n";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=2; msg='"+msg+"'</script>");
        }

        protected void idJFAgregar_Click(object sender, EventArgs e)
        {
            bool ok = false;
            string msg = "";
            cUser UserClass = new cUser();
            if (idJFOp.Value == "grupo")
            {
                if (idJFGrupos.SelectedIndex != -1)
                {
                    foreach (ListItem item in idJFDisponibles.Items)
                    {
                        if (item.Selected)
                        {

                            ok = UserClass.setGroup(item.Value, idJFGrupos.SelectedItem.Value, true);

                        }
                    }
                    ListarJefes(idJFGrupos.SelectedItem.Value);
                }
            }
            else if (idJFOp.Value == "jefe")
            {
                if (idJFJefes.SelectedIndex != -1)
                {
                    foreach (ListItem item in idJFDisponibles.Items)
                    {
                        if (item.Selected)
                        {

                            ok = UserClass.setGroup(idJFJefes.SelectedItem.Value, item.Value, true);

                        }
                    }
                    ListarGruposJefe(idJFJefes.SelectedItem.Value);
                }
            }
            
            if (ok)
                msg = "Operaci&oacute;n exitosa";
            else
                msg = "Error al ejecutar la operaci&oacute;n";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=2; msg='" + msg + "'</script>");
        }
        protected void ListarUsuarios()
        {
            string strQuery;
            ListItem itemGrupo;
            strQuery = "SELECT * FROM Usuarios WHERE SuperUser =0";
                if (DBclass.execQuery(strQuery, "Usuarios"))
                {
                    idPRUsuarios.Items.Clear();
                    foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["Usuarios"].Rows)
                    {
                        itemGrupo = new ListItem(FilaGrupo["Nombre"].ToString() + " " + FilaGrupo["Apellido"].ToString(), FilaGrupo["Email"].ToString());
                        idPRUsuarios.Items.Add(itemGrupo);
                    }
                }
        }
        protected void idPRSetSuper_Click(object sender, EventArgs e)
        {
            bool ok=false;
            string msg = "";
            cUser UserClass = new cUser();

                foreach (ListItem item in idPRUsuarios.Items)
                {
                    if (item.Selected)
                    {
                        ok = UserClass.SuperUserUpdate(item.Value, "1");
                    }
                }

                if (ok)
                {
                    msg = "Operaci&oacute;n exitosa";
                    ListarUsuarios();
                    ListarJefes();
                }
                else
                    msg = "Error al ejecutar la operaci&oacute;n";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=3; msg='" + msg + "'</script>");
        }

        protected void idPRSetUser_Click(object sender, EventArgs e)
        {
            bool ok = false;
            string msg = "";
            cUser UserClass = new cUser();

            foreach (ListItem item in idPRJefes.Items)
            {
                if (item.Selected)
                {
                    ok = UserClass.SuperUserUpdate(item.Value, "0");
                    UserClass.setGroup(item.Value, "NULL", false);
                }
            }

            if (ok)
            {
                msg = "Operaci&oacute;n exitosa";
                ListarUsuarios();
                ListarJefes();
            }
            else
                msg = "Error al ejecutar la operaci&oacute;n";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=3; msg='" + msg + "'</script>");
        }
    }
}